#ifndef _SHELL_H
#define _SHELL_H

#define SHELL_CMD_BUFFER_SIZE 64

typedef int (*programT)(int argc, char *argv[]);


/*
 * Funcion: shell
 * --------------
 * Ejecuta el interprete de comandos ("shell").
 * Interactua con el modulo de procesos para crear nuevos procesos al
 * ingresar comandos, pero internamente tiene un ciclo infinito as� que
 * no devuelve el control a su invocador.
 * Soporta "&" al final de un comando para correr el nuevo proceso en
 * "background".
 * Los procesos que invoca y esta misma reciben
 * parametros al estilo de una funcion main.
 * argc: cantidad de elementos de argv incluyendo el puntero NULL final.
 * argv: arreglo de strings con los parmetros recibidos por el programa.
 * Se espera que sean tales que:
 * argc >= 3 (pero a partir de argv[2], los parametros son ignorados)
 * argv[0]: Nombre de invocacion del shell
 * argv[1]: String que imprimira el shell antes de cada prompt.
 * argv[2]: NULL
 */
int shell(int argc, char *argv[]);

/*
 * Funcion: get_command_alias
 * --------------------------
 * Devuelve el alias del comando asociado a un programa.
 */
char *get_command_alias(programT prg);

/*
 * Funcion: ltrim
 * --------------
 * Devuelve un puntero al primer caracter que no es un espacio.
 */
char *ltrim(const char *s);


#endif /* _SHELL_H */

